#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPlainTextEdit>
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("记事本");

    QMenuBar* menuBar = this->menuBar();// 获取到菜单项
    QMenu* menu = new QMenu("文件");// 添加菜单
    menuBar->addMenu(menu);
    QAction* ac1 = new QAction("打开"); // 添加菜单项
    QAction* ac2 = new QAction("保存");
    menu->addAction(ac1);
    menu->addAction(ac2);

    // 指定一个输入框 edit 为全局变量
    edit = new QPlainTextEdit();
    QFont font;
    font.setPixelSize(25);
    edit->setFont(font);
    this->setCentralWidget(edit);

    // 连接 QAction 信号槽
    connect(ac1, &QAction::triggered, this, &MainWindow::handleAction1);
    connect(ac2, &QAction::triggered, this, &MainWindow::handleAction2);
}

void MainWindow::handleAction1()
{
    // 1. 先弹出 "打开文件" 对话框，选择打开文件
    QString path = QFileDialog::getOpenFileName(this);
    // 2. 把文件名显示到状态栏里
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(path);
    // 3. 根据用户选择路径，构造一个 QFile 对象，并且打开文件
    QFile file(path);
    if(!file.open(QIODevice::ReadOnly)){
        // 打开文件失败
        statusBar->showMessage(path + " 打开失败");
        return;
    }
    // 4. 读取文件
    // 这里需要确保打开的文件是文本文件才行
    // 如果是 二进制文件， 交给 QString，
    QString text = file.readAll();
    // 5. 关闭文件，并设置读取内容
    file.close();
    edit->setPlainText(text);
}

void MainWindow::handleAction2()
{
    // 1. 先弹出 "打开文件" 对话框，选择打开文件
    QString path = QFileDialog::getOpenFileName(this);
    // 2. 显示文件名
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(path);
    // 3. 根据用户选择路径，构造一个 QFile 对象，并且打开文件
    QFile file(path);
    if(!file.open(QIODevice::WriteOnly)){
        statusBar->showMessage(path + " 打开失败");
        return;
    }
    // 4. 写文件
    const QString& text = edit->toPlainText();
    file.write(text.toUtf8());

    file.close();
}


MainWindow::~MainWindow()
{
    delete ui;
}

